import Axios from 'axios';

let axios = Axios.create({
    timeout: 10000,
    baseURL: "http://121.5.35.178:8081/admin"
})
export default axios;
/**
 * 设置超时时间和跨域是否允许携带凭证
 */
axios.defaults.timeout = 10000;//超时时间
axios.defaults.withCredentials = false;//允许跨域

/**
 * 设置请求拦截器
 * 客户端发送请求 -->[请求拦截器]->服务器
 * TOKEN校验（JWT）:接收服务器返回的token 存储到vuex/或本地存储中，
 * 每一次向服务器发送请求，我们应该携带token
 */
axios.interceptors.request.use(config => {
    //携带token
    let token = sessionStorage.getItem('token');
    token && (config.headers.token = token)
    return config;
}, error => {
    return Promise.reject(error);
});
/**
 * 响应拦截器
 * 服务器返回信息  ->[拦截的统一处理] -> 客户端Js获取到信息
 * 
 */

axios.interceptors.response.use(response => {
    let token = sessionStorage.getItem('token');
    token && (response.headers.token = token)
    return response;//返回响应的data数据，其它不返回(根据公司需求完善)
}, error => {
    //请求已经发送，只不过状态码不是200系列，设置不同的状态码的不同处理
    let { response } = error;
    if (response) {
        //服务器最起码返回结果了
        switch (response.status) {
            case 401:// =》权限  当前请求用户需要验证
                break;
            case 403://服务器拒绝执行（一般是token过期）
                localStorage.removeItem('token');//移除token
                //跳转到登录页
                break;
            case 404://=>找不到页面
                break;
            default: break;
        }
    } else {
        //服务器连结果都没有返回
        if (!window.navigator.onLine) {
            //断网处理，可以跳转到断网页面
            return;
        }
        return Promise.reject(error);//服务器问题
    }
});
